﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;

namespace UI
{
    public partial class FrmUsuarioActual_Config : Form
    {
        public FrmUsuarioActual_Config()
        {
            InitializeComponent();
        }

        private void FrmConfiguracion_Load(object sender, EventArgs e)
        {            
            this.lblUsuario.Text = "Nombre de usuario: " + UsuarioLN.UsuarioActual.ID + "\nRol: [" + UsuarioLN.UsuarioActual.Rol.Nombre + "]";
            this.txtNombre.Text = UsuarioLN.UsuarioActual.Nombre;
            this.txtApellidos.Text = UsuarioLN.UsuarioActual.Apellidos;
            this.txtCedula.Text = UsuarioLN.UsuarioActual.Cedula;
            this.txtE_Mail.Text = UsuarioLN.UsuarioActual.E_Mail;           
        }

        #region Click

        private void btnCambiarE_Mail_Click(object sender, EventArgs e)
        {
            this.btnCambiarE_Mail.Enabled = false;
            this.btnCambiarContraseña.Enabled = false;
            this.btnCancelar.Enabled = true;
            this.btnGuardar.Enabled = true;
            this.txtE_Mail.Enabled = true;
            this.txtE_Mail.Select();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.btnCambiarE_Mail.Enabled = true;
            this.txtE_Mail.Enabled = false;
            this.btnCambiarContraseña.Enabled = true;
            this.txtContraseñaActual.Visible = false;
            this.txtContraseñaNueva.Visible = false;
            this.txtContraseñaRepetir.Visible = false;
            this.btnGuardar.Enabled = false;
            this.btnCancelar.Enabled = false;
        }

        private void btnCambiarContraseña_Click(object sender, EventArgs e)
        {
            this.btnCambiarE_Mail.Enabled = false;
            this.btnCambiarContraseña.Enabled = false;
            this.txtContraseñaActual.Visible = true;
            this.txtContraseñaNueva.Visible = true;
            this.txtContraseñaRepetir.Visible = true;
            this.btnCancelar.Enabled = true;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            this.btnGuardar.Enabled = false;
            this.ptbLoading.Visible = true;
            this.bgwGuardar.RunWorkerAsync();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        #region TextBox

        private void txtContraseñaActual_Enter(object sender, EventArgs e)
        {
            if (this.txtContraseñaActual.Text == "Contraseña actual")
            {
                this.txtContraseñaActual.PasswordChar = '•';
                this.txtContraseñaActual.Text = "";
                this.txtContraseñaActual.ForeColor = SystemColors.Desktop;
            }
        }

        private void txtContraseñaActual_Leave(object sender, EventArgs e)
        {
            if (this.txtContraseñaActual.Text == "")
            {
                this.txtContraseñaActual.Text = "Contraseña actual";
                this.txtContraseñaActual.PasswordChar = (char)0;
                this.txtContraseñaActual.ForeColor = SystemColors.GrayText;
            }
            else
            {
                if (!this.bgwVerificaContraseña.IsBusy)
                {
                    this.ptbLoading.Visible = true;
                    this.bgwVerificaContraseña.RunWorkerAsync();
                }
            }
        }

        private void txtContraseñaNueva_Enter(object sender, EventArgs e)
        {
            if (this.txtContraseñaNueva.Text == "Contraseña nueva")
            {
                this.txtContraseñaNueva.PasswordChar = '•';
                this.txtContraseñaNueva.Text = "";
                this.txtContraseñaNueva.ForeColor = SystemColors.Desktop;
            }
        }

        private void txtContraseñaNueva_Leave(object sender, EventArgs e)
        {
            if (this.txtContraseñaNueva.Text == "")
            {
                this.txtContraseñaNueva.Text = "Contraseña nueva";
                this.txtContraseñaNueva.PasswordChar = (char)0;
                this.txtContraseñaNueva.ForeColor = SystemColors.GrayText;
            }
        }

        private void txtContraseñaRepetir_Enter(object sender, EventArgs e)
        {
            if (this.txtContraseñaRepetir.Text == "Repita la contraseña")
            {
                this.txtContraseñaRepetir.PasswordChar = '•';
                this.txtContraseñaRepetir.Text = "";
                this.txtContraseñaRepetir.ForeColor = SystemColors.Desktop;
            }
        }

        private void txtContraseñaRepetir_Leave(object sender, EventArgs e)
        {
            if (this.txtContraseñaRepetir.Text == "")
            {
                this.txtContraseñaRepetir.Text = "Repita la contraseña";
                this.txtContraseñaRepetir.PasswordChar = (char)0;
                this.txtContraseñaRepetir.ForeColor = SystemColors.GrayText;
            }
        }

        #endregion

        #region BagroundWorker

        private void bgwVerificaContraseña_DoWork(object sender, DoWorkEventArgs e)
        {
            UsuarioLN usuario = new UsuarioLN();
            try
            {
                this.bgwVerificaContraseña.ReportProgress(0, "Validando...");
                usuario.IniciarSesion(UsuarioLN.UsuarioActual.ID, this.txtContraseñaActual.Text);
                this.bgwVerificaContraseña.ReportProgress(1, "La contraseña es correcta.");
            }
            catch (Exception ex)
            {
                this.bgwVerificaContraseña.ReportProgress(3, ex.Message);
            }
        }

        private void bgwVerificaContraseña_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.lblMensaje.Text = e.UserState.ToString();
            if (e.ProgressPercentage == 1)
            {
                this.btnGuardar.Enabled = true;
            }
            else
            {
                this.btnGuardar.Enabled = false;
            }
        }

        private void bgwVerificaContraseña_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.ptbLoading.Visible = false;
        }

        private void bgwGuardar_DoWork(object sender, DoWorkEventArgs e)
        {
            UsuarioLN usuario = new UsuarioLN();
            try
            {
                this.bgwGuardar.ReportProgress(0, "Validando...");
                if (this.txtE_Mail.Enabled == true)
                {
                    usuario.CambiarE_Mail(this.txtE_Mail.Text);
                    this.bgwGuardar.ReportProgress(1, "E_Mail cambiado exitosamente.");
                }
                else
                {
                    if (this.txtContraseñaNueva.Text == this.txtContraseñaRepetir.Text)
                    {
                        usuario.CambiarContraseña(this.txtContraseñaNueva.Text);
                        this.bgwGuardar.ReportProgress(3, "Contraseña cambiada exitosamente.");
                    }
                    else
                    {
                        this.bgwGuardar.ReportProgress(5, "Las contraseñas no coinciden.");
                    }
                }
            }
            catch (Exception ex)
            {
                this.bgwGuardar.ReportProgress(6, ex.Message);
            }
        }

        private void bgwGuardar_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.lblMensaje.Text = e.UserState.ToString();
            if (e.ProgressPercentage == 1)
            {
                this.btnCancelar_Click(sender, e);
                UsuarioLN.UsuarioActual.E_Mail = this.txtE_Mail.Text;
            }
            if (e.ProgressPercentage == 3)
            {
                this.btnCancelar_Click(sender, e);
                this.txtContraseñaActual.Clear();
                this.txtContraseñaActual_Leave(sender, e);
                this.txtContraseñaNueva.Clear();
                this.txtContraseñaNueva_Leave(sender, e);
                this.txtContraseñaRepetir.Clear();
                this.txtContraseñaRepetir_Leave(sender, e);
            }
        }

        private void bgwGuardar_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.ptbLoading.Visible = false;
        }

        #endregion

    }
}
